﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CAGFIP.Jogo
{
    internal class Pontuacao
    {
        #region Fields

        private float pontos;
        /* TODO: GUI deve passar método de atualização do display de pontuacao para esta classe por meio do controlador de jogo */
        private GUIUpdate<float> updateHandler;
        private Dificuldade dificuldade;

        #endregion

        #region Constructors

        public Pontuacao(GUIUpdate<float> updateHandler)
        {
            if (updateHandler == null) throw new ArgumentNullException("updateHandler");
            this.updateHandler = updateHandler;
        }
		 
	    #endregion

        #region Properties

        public float Pontos
        {
            get { return this.pontos; }
            private set
            {
                updateHandler(this.pontos = value);
            }
        }

        #endregion

        #region Methods

        public void Configurar(Dificuldade dif)
        {
            this.dificuldade = dif;
            Pontos = 0;
        }

        public void Atualizar(PerguntaEndCode code)
        {
            switch (code)
            {
                case PerguntaEndCode.Acerto:
                case PerguntaEndCode.ChuteAcerto:
                    Pontos++;
                    break;
                case PerguntaEndCode.Erro:
                case PerguntaEndCode.Tempo:
                    Pontos *= this.dificuldade.FatorPontuacaoErro;
                    break;
                case PerguntaEndCode.ChuteErro:
                case PerguntaEndCode.Desistencia:
                case PerguntaEndCode.Pulo:
                    //do nothing
                    break;
            }
        }

        #endregion
    }
}
